﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Project.Core;
using Microsoft.Xna.Framework.Graphics;
namespace TLS
{
    public class Caminante : Enemigo
    {
        private float fuerzaGravedad = 0.002f;
        private Game1 game;

        public float velocidad { get; set; }

        public Animacion ACaminandoDerecha;
        public Animacion ACaminandoIzquierda;
        public Animacion AParadoDerecha;
        public Animacion AParadoIzquierda;
        public Animacion ASaltandoDerecha;
        public Animacion ASaltandoIzquierda;

        public double ataque;
        public bool cambioEstado;

        public enum Estados
        {
            CAMINANDO, SALTANDO, PARADO
        }
        public Estados Estado { get; set; }
        public enum Direcciones
        {
            IZQUIERDA, DERECHA
        }
        public Direcciones Direccion { get; set; }

        public Caminante(Game1 game)
            : base(null)
        {
            this.game = game;
            //Cargamos imagenes de Caminante mirando a la izquierda
            Texture2D Caminante01i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_01");
            Texture2D Caminante02i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_02");
            Texture2D Caminante03i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_03");
            Texture2D Caminante04i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_04");
            Texture2D Caminante05i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_05");
            Texture2D Caminante06i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_06");
            Texture2D Caminante07i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_07");
            Texture2D Caminante08i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_08");
            Texture2D Caminante09i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_09");
            Texture2D Caminante10i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_10");
            Texture2D Caminante11i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_11");
            Texture2D Caminante12i = game.Content.Load<Texture2D>("Caminante/caminando/zombiel_12");
            //Parado
            Texture2D Caminante001i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_01");
            Texture2D Caminante002i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_02");
            Texture2D Caminante003i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_03");
            Texture2D Caminante004i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_04");
            Texture2D Caminante005i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_05");
            Texture2D Caminante006i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_06");
            Texture2D Caminante007i = game.Content.Load<Texture2D>("Caminante/parado/zombiel_07");



            //Cargamos imagenes de Caminante mirando a la derecha
            Texture2D Caminante01d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_01");
            Texture2D Caminante02d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_02");
            Texture2D Caminante03d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_03");
            Texture2D Caminante04d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_04");
            Texture2D Caminante05d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_05");
            Texture2D Caminante06d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_06");
            Texture2D Caminante07d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_07");
            Texture2D Caminante08d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_08");
            Texture2D Caminante09d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_09");
            Texture2D Caminante10d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_10");
            Texture2D Caminante11d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_11");
            Texture2D Caminante12d = game.Content.Load<Texture2D>("Caminante/caminando/zombier_12");
            //Parado
            Texture2D Caminante001d = game.Content.Load<Texture2D>("Caminante/parado/zombier_01");
            Texture2D Caminante002d = game.Content.Load<Texture2D>("Caminante/parado/zombier_02");
            Texture2D Caminante003d = game.Content.Load<Texture2D>("Caminante/parado/zombier_03");
            Texture2D Caminante004d = game.Content.Load<Texture2D>("Caminante/parado/zombier_04");
            Texture2D Caminante005d = game.Content.Load<Texture2D>("Caminante/parado/zombier_05");
            Texture2D Caminante006d = game.Content.Load<Texture2D>("Caminante/parado/zombier_06");
            Texture2D Caminante007d = game.Content.Load<Texture2D>("Caminante/parado/zombier_07");

            //Animacion Caminante caminando a la izquierda
            ACaminandoIzquierda = new Animacion();
            ACaminandoIzquierda.agregarFrame(Caminante01i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante02i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante03i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante04i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante05i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante06i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante07i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante08i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante09i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante10i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante11i, 200);
            ACaminandoIzquierda.agregarFrame(Caminante12i, 200);
            //Parado
            AParadoIzquierda = new Animacion();
            AParadoIzquierda.agregarFrame(Caminante001i, 350);
            AParadoIzquierda.agregarFrame(Caminante002i, 350);
            AParadoIzquierda.agregarFrame(Caminante003i, 350);
            AParadoIzquierda.agregarFrame(Caminante004i, 350);
            AParadoIzquierda.agregarFrame(Caminante005i, 350);
            AParadoIzquierda.agregarFrame(Caminante006i, 350);
            AParadoIzquierda.agregarFrame(Caminante007i, 350);
            //Animacion Caminante caminando a la derecha
            ACaminandoDerecha = new Animacion();
            ACaminandoDerecha.agregarFrame(Caminante01d, 200);
            ACaminandoDerecha.agregarFrame(Caminante02d, 200);
            ACaminandoDerecha.agregarFrame(Caminante03d, 200);
            ACaminandoDerecha.agregarFrame(Caminante04d, 200);
            ACaminandoDerecha.agregarFrame(Caminante05d, 200);
            ACaminandoDerecha.agregarFrame(Caminante06d, 200);
            ACaminandoDerecha.agregarFrame(Caminante07d, 200);
            ACaminandoDerecha.agregarFrame(Caminante08d, 200);
            ACaminandoDerecha.agregarFrame(Caminante09d, 200);
            ACaminandoDerecha.agregarFrame(Caminante10d, 200);
            ACaminandoDerecha.agregarFrame(Caminante11d, 200);
            ACaminandoDerecha.agregarFrame(Caminante12d, 200);
            //Parado
            AParadoDerecha = new Animacion();
            AParadoDerecha.agregarFrame(Caminante001d, 350);
            AParadoDerecha.agregarFrame(Caminante002d, 350);
            AParadoDerecha.agregarFrame(Caminante003d, 350);
            AParadoDerecha.agregarFrame(Caminante004d, 350);
            AParadoDerecha.agregarFrame(Caminante005d, 350);
            AParadoDerecha.agregarFrame(Caminante006d, 350);
            AParadoDerecha.agregarFrame(Caminante007d, 350);


            base.animacion = ACaminandoIzquierda;
            this.Direccion = Direcciones.IZQUIERDA;
            //velocidad = 0.09f;
            Random num = new Random();
            vida = num.Next(5, 7);
            //ataque = num.NextDouble();
            ataque = 0.2f;
            velocidad = 0.05f;

        }

        public override void actualizar(long tiempo)
        {
            switch (Direccion)
            {
                case Direcciones.IZQUIERDA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoIzquierda;
                            velocidadX = -velocidad;
                            break;
                        case Estados.PARADO:
                            base.animacion = AParadoIzquierda;
                            break;
                    }
                    break;
                case Direcciones.DERECHA:
                    switch (Estado)
                    {
                        case Estados.CAMINANDO:
                            base.animacion = ACaminandoDerecha;
                            velocidadX = velocidad;
                            break;
                        case Estados.PARADO:
                            base.animacion = AParadoDerecha;
                            break;
                    }
                    break;
            }

            base.actualizar(tiempo);
            
            /*Cambiar la vista de los enemigos para el lado donde se encuentra el personaje principal*/
            //if (((escenarioActual.spriteScrolling.x - this.x) <= 300 && (escenarioActual.spriteScrolling.x - this.x >= 0)))
            //{
            //    Direccion = Direcciones.DERECHA;
            //}
            //else if (this.x - escenarioActual.spriteScrolling.x <= 300 && (this.x - escenarioActual.spriteScrolling.x >= 0))
            //{
            //    Direccion = Direcciones.IZQUIERDA;
            //}
           
            //Gravedad
            velocidadY += fuerzaGravedad * tiempo;
        }

        public void morir()
        {
            this.escenarioActual.sprites.Remove(this);
        }

        //public void verSangre()
        //{
        //    objSangre = new Sangre(this.game);
        //    objSangre.y = this.y;
        //    if (Direccion == Direcciones.IZQUIERDA)
        //    {
        //        objSangre.x = (this.x + this.animacion.obtenerImagen().Width) - 20;
        //        objSangre.y = this.animacion.obtenerImagen().Height / 2;
        //    }
        //    else
        //    {
        //        objSangre.x = (this.x + this.animacion.obtenerImagen().Width) + 20;
        //        objSangre.y = this.animacion.obtenerImagen().Height / 2;
        //    }
        //    escenarioActual.sprites.Add(objSangre);
        //}

        public override void evento_ColisionVerticalTile()
        {
            if (velocidadY >= 0 && Estado == Caminante.Estados.SALTANDO)
            {
                Estado = Caminante.Estados.PARADO;
            }
            base.evento_ColisionVerticalTile();
        }

        public override void evento_ColisionHorizontalTile()
        {
            if (Direccion == Direcciones.DERECHA) Direccion = Direcciones.IZQUIERDA;
            else if (Direccion == Direcciones.IZQUIERDA) Direccion = Direcciones.DERECHA;
        }

        public override void evento_ColisionHorizontalSprite(Sprite objSprite)
        {
            if (objSprite is Bloque || objSprite is Caminante)
            {
                if (Direccion == Direcciones.DERECHA) Direccion = Direcciones.IZQUIERDA;
                else if (Direccion == Direcciones.IZQUIERDA) Direccion = Direcciones.DERECHA;
            }
        }
    }

}
